home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_a / bugs1.act < prev    next >
Text File  |  1995-04-22  |  4KB  |  178 lines

  1.  
  2.     ACTION! BUG SHEET #3 - part 1
  3.  
  4. This document supercedes the previous
  5. two bug sheets published for ACTION!
  6.  
  7. November 6, 1984
  8.  
  9. -------------------------------------
  10.  
  11.          GENERAL INFORMATION
  12.  
  13. Before getting to the bad stuff (the
  14. bugs), here are some goodies about
  15. ACTION! which we would like to pass
  16. on to you:
  17.  
  18. TIPS ON TEMPS
  19.  
  20. A magazine article titled "Lights,
  21. Camera, Action!" (by Dave Plotkin)
  22. which appeared in the July 1984 issue
  23. of ANTIC featured a set of routines
  24. to facilitate writing ACTION!-based
  25. interrupt handlers.
  26.  
  27. The article gave the listings for two
  28. routines (more properly, two DEFINEs)
  29. named "SaveTemps" and "GetTemps".
  30. These routines are adequate only if
  31. no math beyond addition and
  32. subtraction is performed in the
  33. interrupt service routine.  The
  34. following versions of these two
  35. routines will work properly in the
  36. more general case:
  37.  
  38. Make the following DEFINEs in your
  39. program before you declare your
  40. interrupt routine (comments may be
  41. omitted-- they exist only for clari-
  42. fication):DEFINE SaveTemps=
  43.   "[
  44.      $A2 $07     ;       LDX #7
  45.      $B5 $C0     ; LOOP  LDA $C0,X
  46.      $48         ;       PHA
  47.      $B5 $A0     ;       LDA $A0,X
  48.      $48         ;       PHA
  49.      $B5 $80     ;       LDA $80,X
  50.      $48         ;       PHA
  51.      $B5 $A8     ;       LDA $A8,X
  52.      $48         ;       PHA
  53.      $CA         ;       DEX
  54.      $10 $F1     ;       BPL LOOP
  55.      $A5 $D3     ;       LDA $D3
  56.      $48         ;       PHA
  57.   ]"
  58.  
  59. DEFINE GetTemps=
  60.   "[
  61.      $68         ;       PLA
  62.      $85 $D3     ;       STA $D3
  63.      $A2 $00     ;       LDX #0
  64.      $68         ; LOOP  PLA
  65.      $95 $A8     ;       STA $A8,X
  66.      $68         ;       PLA
  67.      $95 $80     ;       STA $80,X
  68.      $68         ;       PLA
  69.      $95 $A0     ;       STA $A0,X
  70.      $68         ;       PLA
  71.      $95 $C0     ;       STA $C0,X
  72.      $E8         ;       INX
  73.      $E0 $08     ;       CPX #8
  74.      $D0 $EF     ;       BNE LOOP
  75.   ]"
  76.  
  77. Use these routines inside your
  78. interrupt routine as follows:
  79.  
  80. ; Your interrupt routine.
  81. PROC InterruptRoutine()
  82.   ; Local declarations, if any.
  83.     BYTE a, b, c, etc.
  84.   ; First line of code within
  85.   ; procedure    SaveTemps
  86.  
  87.     ... ; Your interrupt
  88.         ; code goes here.
  89.  
  90.     GetTemps      ; Last line of code
  91.                   ; within procedure.
  92. [$6C OldVBI]      ; A special way to
  93.                   ; end for VBIs- see
  94.                   ; below.
  95.  
  96. For example, the following program
  97. will set up the routine ChangeColor
  98. as a vertical blank interrupt routine
  99. (hit the START key to exit theprogram):
  100.  
  101. DEFINE SaveTemps=
  102.   "[ $A2 $07 $B5 $C0 $48
  103.      $B5 $A0 $48 $B5 $80
  104.      $48 $B5 $A8 $48 $CA
  105.      $10 $F1 $A5 $D3 $48 ]"
  106.  
  107. DEFINE GetTemps=
  108.   "[ $68 $85 $D3 $A2 $00 $68
  109.      $95 $A8 $68 $95 $80 $68
  110.      $95 $A0 $68 $95 $C0 $E8
  111.      $E0 $08 $D0 $EF ]"
  112.  
  113. CARD OldVBI    ; Will hold previous
  114.                ; contents of vertical
  115.                ; blank interrupt
  116.                ; vector.
  117.  
  118.  
  119. ; This procedure will change the
  120. ; background color to random values.
  121. ; The main routine will set up this
  122. ; code to operate during the
  123. ; deferred vertical blank interrupt.
  124. PROC ChangeColor()
  125.     BYTE hue, lum
  126.  
  127.     SaveTemps
  128.     hue = Rand( 16 )
  129.     lum = Rand( 16 )
  130.     SetColor(2,hue,lum)
  131.     GetTemps
  132. [ $6C OldVBI ]  ; Vertical blank
  133.                 ; interrupts must end
  134.                 ; like this ($6C is a
  135.                 ; 6502 indirect jump
  136.                 ; instruction).
  137.  
  138. PROC Test()     ; Main routine
  139.  BYTE critic=$42, ; Critical I/O flag
  140.       console=$D01F ; Console key
  141.          ; hardware location
  142.  CARD VBIvec=$224 ; Deferred vertical
  143.          ; blank interrupt vector
  144.  
  145.     ; You must install a VBI
  146.     ; routine like this:
  147.     critic = 1    OldVBI = VBIvec
  148.     VBIvec = ChangeColor
  149.     critic = 0
  150.  
  151.     ; ChangeColor is now running
  152.     ; as the vertical blank interrupt
  153.     ; routine-- since our mainline
  154.     ; code has nothing more to do,
  155.     ; we just go into a loop waiting
  156.     ; for the START key to be
  157.     ; pressed.    WHILE console&1
  158.       DO
  159.       OD
  160.  
  161.     ; Now turn off the VBI routine.
  162.     critic = 1
  163.     VBIvec = OldVBI
  164.     critic = 0
  165. RETURN
  166.  
  167. This method of saving and restoring
  168. ACTION zero page variables may also
  169. be used to write BASIC machine
  170. language subroutines in ACTION!  Your
  171. main ACTION routine should then have
  172. SaveTemps as the first executable
  173. line, and GetTemps as the last
  174. executable line before the RETURN
  175. statement.
  176.  
  177.  
  178.